package com.gitee.wsl.ext.array.bytes

import com.gitee.wsl.lang.ByteOrder


/**
 * @return the Long as a byte array in little endian format
 */
//fun Long.toByteArray(): ByteArray = byteArrayOf(
//    this.toByte(),
//    (this ushr 8).toByte(),
//    (this ushr 16).toByte(),
//    (this ushr 24).toByte(),
//    (this ushr 32).toByte(),
//    (this ushr 40).toByte(),
//    (this ushr 48).toByte(),
//    (this ushr 56).toByte(),
//)

fun Long.toByteArray(byteOrder: ByteOrder = ByteOrder.BigEndian): ByteArray{
    val bytes = ByteArray(Long.SIZE_BYTES)
    toByteArray(bytes,byteOrder,0)
    return bytes
}

fun Long.toByteArray(byteArray: ByteArray,byteOrder: ByteOrder= ByteOrder.BigEndian,startIndex:Int=0){
    byteArray.updateUseLittleEndian(byteOrder,startIndex,Long.SIZE_BYTES){
        (this ushr 8*it).toByte()
    }
}


/**
 * @return an Long from a byte array in little endian format
 */
//fun ByteArray.toLong(): Long
//{
//    var long = 0L
//    forEachIndexed { index, byte -> long = long or (byte.toUByte().toLong() shl 8 * index) }
//    return long
//}

fun ByteArray.toLong(order: ByteOrder = ByteOrder.BigEndian,startIndex: Int = 0): Long
{
    var value = 0L
    getUseLittleEndian(order,startIndex,Long.SIZE_BYTES) { index, byte -> value = value or (byte.toUByte().toLong() shl 8 * index) }
    return value
}